본 게시글의 원문은 Yann Debray의 MATLAB with Python Book 입니다. 해당 책은 MIT 라이센스를 따르기 때문에 개인적으로 번역하여 재배포 합니다. 본 포스팅에는 추후 유료 수익을 위한 광고가 부착될 수도 있습니다.

MIT License

Copyright (c) 2023 Yann Debray

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

본 게시물에서 활용된 소스 코드들은 모두 Yann Debray의 GitHub Repo에서 확인할 수 있습니다.

4.6. MATLAB에서 호출되는 Python 코드 디버그하기

언어 경계를 넘나드는 양언어 애플리케이션을 개발할 때 가장 처음으로 마주치게 되는 어려움 중 하나는 언어 경계를 넘어서 디버깅하는 것입니다. 다음 예제에서는 앱의 Python 부분을 디버그하기 위해 MATLAB 세션을 VSCode나 Visual Studio 프로세스에 연결하는 방법을 보여줄 것입니다. 다음 장에서는 그 반대인 MATLAB 부분을 아름다운 MATLAB 디버거를 사용해 디버그하는 방법을 살펴볼 것입니다.

4.6.1. Visual Studio Code를 사용한 디버깅

이 섹션은 VSCode를 사용하여 MATLAB에서 호출된 Python 코드를 디버깅하는 방법을 8단계로 보여줍니다:

1) VS Code를 설치하고 프로젝트를 생성합니다.

이 튜토리얼에서 Visual Studio Code를 설치하는 방법, Python 프로젝트를 설정하는 방법, Python 인터프리터를 선택하는 방법 및 launch.json 파일을 생성하는 방법에 대한 지침을 확인하세요.

2) 터미널에서 다음과 같이 debugpy 모듈을 설치합니다.

$ python -m pip install debugpy

3) VS Code에서 다음 디버깅 코드를 Python 모듈의 맨 위에 추가합니다.

import debugpy
debugpy.debug_this_thread()

4) launch.json 파일을 아래의 코드로 구성하여 MATLAB을 선택하고 연결하도록 설정합니다.

{
    "version": "0.2.0",
    "configurations": [
         {  
            "name": "Attach to MATLAB",
            "type": "python",
            "request": "attach",
            "processId": "${command:pickProcess}"
         }
    ]
}

5) 코드에 중단점을 추가합니다.

6) MATLAB에서 Python 환경을 설정하고 ProcessID 번호를 가져옵니다. 이 예제에서 ExecutionModeInProcess로 설정되어 있습니다.

>> pyenv 

ans = 
  PythonEnvironment with properties:

          Version: "3.8"
       Executable: "C:\Users\ydebray\AppData\Local\Programs\Python\Python38\python.exe"
          Library: "C:\Users\ydebray\AppData\Local\Programs\Python\Python38\python38.dll"
             Home: "C:\Users\ydebray\AppData\Local\Programs\Python\Python38"
           Status: Loaded
    ExecutionMode: InProcess
        ProcessID: "12772"
      ProcessName: "MATLAB"

만약 Status: NotLoaded가 표시된다면, Python 인터프리터를 로드하기 위해 아무 Python 명령을 실행한 다음 (예를 들어 >> py.list), pyenv 명령을 실행하여 MATLAB 프로세스의 ProcessID를 얻으십시오.

7) MATLAB 프로세스를 VS Code에 연결합니다.

VS Code에서 “Run and Debug” (Ctrl+Shift+D)를 선택한 후, 디버깅을 시작하는 화살표를 선택합니다 (F5). 이 예제에서 녹색 화살표에는 “Attach to MATLAB”라는 레이블이 표시됩니다. 이는 launch.json 파일에서 지정한 “name” 매개변수의 값과 일치합니다. 드롭다운 메뉴의 검색 창에 “matlab”을 입력하고, pyenv 명령의 출력과 일치하는 “MATLAB.exe” 프로세스를 선택하세요. 만약 OutOfProcess 실행 모드를 사용 중이라면, “MATLABPyHost.exe” 프로세스를 검색해야 할 것입니다.

In-process 실행 모드:

Out-of-Process 실행 모드:

8) MATLAB에서 Python 함수를 호출합니다. 실행이 중단되어야 할 중단점에서 멈출 것입니다.

다음 MATLAB 코드를 실행하여 Python 함수 search 내부로 들어가 보세요:

>> N = py.list({'Jones','Johnson','James'})
>> py.mymod.search(N)

4.6.2. Visual Studio로 디버깅하기

만약 Visual Studio에 접근할 수 있고 더 익숙하다면, Visual Studio를 사용하여 이전과 동일한 작업을 수행할 수 있습니다. Visual Studio를 열고 기존 코드로부터 새 Python 프로젝트를 생성합니다. 그런 다음 디버그 메뉴에서 “Attach to Process”를 선택하세요: